package cn.training.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
	
	static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
        '9', 'a', 'b', 'c', 'd', 'e', 'f' };
	 static MessageDigest messagedigest = null;
	    static {
	        try {
	            messagedigest = MessageDigest.getInstance("MD5");
	        } catch (NoSuchAlgorithmException e) {
	            e.printStackTrace();
	        }
	    }
	 public static String getMD5(File file) throws IOException {
	        InputStream fis = new FileInputStream(file);
	        byte[] buffer = new byte[1024];
	        int numRead = 0;
	        while ((numRead = fis.read(buffer)) > 0) {
	            messagedigest.update(buffer, 0, numRead);
	        }
	        fis.close();
	        return bufferToHex(messagedigest.digest());
	    }
	 private static String bufferToHex(byte bytes[]) {
	        return bufferToHex(bytes, 0, bytes.length);
	    }

	    private static String bufferToHex(byte bytes[], int m, int n) {
	        StringBuffer stringbuffer = new StringBuffer(2 * n);
	        int k = m + n;
	        for (int l = m; l < k; l++) {
	            appendHexPair(bytes[l], stringbuffer);
	        }
	        return stringbuffer.toString();
	    }

	    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
	        char c0 = hexDigits[(bt & 0xf0) >> 4];
	        char c1 = hexDigits[bt & 0xf];
	        stringbuffer.append(c0);
	        stringbuffer.append(c1);
	    }

	    public static String getMD5(String str) {
	        byte[] b = str.getBytes();
	        messagedigest.update(b, 0, str.length());
	        return bufferToHex(messagedigest.digest());
	    }
}
